# -*- coding: utf-8 -*-
#   操作model的方法
# @Time    ： 2024/4/9  20:09
# @Auther  ： 徐良
# File     :  modelFunction.py

from share.dataFactory import DataFactory
from mesParts.model.tableModel import TableModel


# 检查列表中的model是有脏
def checkModelsIsDirty(modelList):
    """
    如果列表中所有的 model 的 dirty 属性都是 False，则返回 False，否则返回 True
    any 函数，它会检查给定的可迭代对象（这里是列表）中是否至少有一个元素为 True
    :param modelList: 包含 model 对象的列表
    :return: 如果所有 model 的 dirty 属性都为 False，则返回 False，否则返回 True
    """
    return any(model.dirty for model in modelList)


# 获取model
def getModel(sql, dbType='mysql'):
    """
    获取model
    :param sql:
    :param dbType:
    :return:
    """
    model = DataFactory.getQueryModelForSql(sql, dbType)
    return model


# 获取Tablemodel
def getTableModelBySql(pdic):
    """
    直接通过sql获取model, TableModel 类
    :param pdic: baseDbType, fieldNameList, alignList
    :param sSql:
    :return:
    """
    model = TableModel(pdic)
    return model


# 获取model最大记录数
def getMaxRecrodByModel(model):
    """
    获取model最大记录数
    :param model:
    :return:int
    """
    return model.rowCount()


# 获取当前勾选记录的fid
def getFselFIdByModel(model):
    """
    获取当前勾选记录的fid
    :param model:
    :return: FId,recordNo  返回FId,和记录号，如果未选择，返回‘-1’， -1
    """
    ret = '-1'
    rec = -1
    for row in range(0, model.rowCount()):
        if model.record(row).value('FSel') == 1:
            ret = str(model.record(row).value('FId'))
            rec = row
            break
    return ret, rec


def removeRecord(model, iRec):
    """
    移除model中指定记录
    :param model:
    :param iRec:
    :return:
    """
    model.removeRows(iRec)


# 移除指定记录，并重新设置FXh
def removeRecordAndReSetFxh(model, iRec):
    """
    移除指定记录，并重新设置FXh
    :param model:
    :param iRec: 需要移除的记录号
    :return:
    """
    iFxh = model.getColForField('fxh')
    model.removeRows(iRec)
    i = 1
    for row in range(0, model.rowCount()):
        index = model.index(row, iFxh)
        model.setData(index, i)
        i += 1


# 有条件清除model中FSel
def clearFelByConditionForModel(model, row=None):
    """
    如果row不等于None, 则保持这个行号的当前状态
    如果row等于None, 则清除所有选择
    :param model:
    :param row: 行号
    :return:
    """
    # 获取当前选中行的索引
    iFSel = model.record(row).value('FSel')
    for r in range(0, model.rowCount()):
        index = model.index(r, 0)
        model.setData(index, 0)

    if iFSel:
        index = model.index(row, 0)
        model.setData(index, 1)

# 从model中按Fid获取记录
def getRecordByFidFromModel(model, fid):
    """
    从model中按Fid获取记录
    :param model:
    :param fid:
    :return: record
    """
    ret = None

    for row in range(0, model.rowCount()):
        if fid == model.record(row).value('FId'):
            ret = model.record(row)
            break

    return ret

